﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using br.com.SistemaChamados.Enum;
using br.com.SistemaChamados.Model;
using br.com.SistemaChamados.DAO;
using System.Data;

namespace br.com.SistemaChamados.Controller
{
    public class SectorController
    {
        /// <summary>
        /// Método responsável por listar todos os setores de uma unidade
        /// </summary>
        /// <param name="unit">A unidade da qual se deseja obter os setores</param>
        /// <returns>List - Sector</returns>
        public List<Sector> GetSectorsByUnit(Unit unit)
        {
            List<Sector> listSector = null;
            try
            {
                listSector = SectorDAO.GetSectorsByUnit(unit);
                if (listSector != null)
                {
                    return listSector;
                }
                else
                {
                    return new List<Sector>();
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        /// <summary>
        /// Método responsável por inserir um determinado setor
        /// </summary>
        /// <param name="sector">O setor a ser inserido</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState InsertSector(Sector sector)
        {
            EnumCRUDState resultSector = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultSector = SectorDAO.InsertSector(sector);
            }
            catch (Exception ex)
            {
                resultSector = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultSector;
        }

        /// <summary>
        /// Método responsável por atualizar um setor
        /// </summary>
        /// <param name="sector">O setor a ser atualizado</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState UpdateSector(Sector sector)
        {
            EnumCRUDState resultSector = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultSector = SectorDAO.UpdateSector(sector);
            }
            catch (Exception ex)
            {
                resultSector = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultSector;
        }

        /// <summary>
        /// Método responsável por recuperar todos os setores
        /// </summary>
        /// <returns>List - Sector</returns>
        public List<Sector> GetSectors()
        {
            List<Sector> listSector = null;
            try
            {
                listSector = SectorDAO.GetSectors();
                if (listSector != null)
                {
                    return listSector;
                }
                else
                {
                    return new List<Sector>();
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        /// <summary>
        /// Método responsável por recuperar um setor específico
        /// </summary>
        /// <param name="sector">O setor com o Id a ser recuperado</param>
        /// <returns>Sector</returns>
        public Sector GetSector(Sector sector)
        {
            Sector resultSector = null;
            try
            {
                resultSector = SectorDAO.GetSector(sector.Id);
                if (resultSector != null)
                {
                    return resultSector;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }

        /// <summary>
        /// Método responsável por deletar um setor
        /// </summary>
        /// <param name="sector">O setor a ser removido</param>
        /// <returns>EnumCRUDState</returns>
        public EnumCRUDState DeleteSector(Sector sector)
        {
            EnumCRUDState resultSector = EnumCRUDState.SQL_NOTHING;
            try
            {
                resultSector = SectorDAO.DeleteSector(sector);
            }
            catch (Exception ex)
            {
                resultSector = EnumCRUDState.SQL_ERROR;
                throw ex;
            }
            return resultSector;
        }

        /// <summary>
        /// Método responsável por listar todos os setores de uma determinada unidade
        /// </summary>
        /// <param name="sector">O setor com a unidade da qual se deseja obter todos os setores</param>
        /// <returns>List - Sector</returns>
        public List<Sector> ListSectorByUnit(Sector sector)
        {
            List<Sector> resultSector = null;
            try
            {
                resultSector = SectorDAO.GetSectorsByUnit(sector.Unit);
                if (resultSector != null)
                {
                    return resultSector;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                return resultSector;
                throw ex;
            }
        }

        public SectorController()
        {

        }
    }
}